package com.frank.practice.service;

import com.frank.practice.api.req.*;
import com.frank.practice.api.vo.RankVo;
import com.frank.practice.api.vo.ReportVo;
import com.frank.practice.api.vo.ScoreDetailVo;
import com.frank.practice.api.vo.SubjectDetailVo;

import java.util.List;

/**
 * @author Frank Zou
 * @version v0.0.1
 * @date 2025/6/19
 * @description
 */
public interface PracticeDetailService {

    /**
     * 提交题目详情
     * @param req 提交题目详情请求
     * @return 提交结果
     */
    Boolean submitSubject(SubmitSubjectDetailReq req);

    /**
     * 提交练习详情
     * @param req 提交练习详情请求
     * @return 提交结果
     */
    Boolean submitPractice(SubmitPracticeDetailReq req);

    /**
     * 获取答案解析-每题得分
     * @param req 获取答案解析请求
     * @return 每题得分详情
     */
    List<ScoreDetailVo> getScoreDetail(GetScoreDetailReq req);

    /**
     * 获取答题详情
     * @param req 获取答题详情请求
     * @return 答题详情
     */
    SubjectDetailVo getSubjectDetail(GetSubjectDetailReq req);

    /**
     * 获取报告
     * @param practiceId 练习id
     * @return 报告
     */
    ReportVo getReport(Long practiceId);

    /**
     * 获取练习排行榜
     * @return 练习排行榜
     */
    List<RankVo> getPracticeRankList();


    /**
     * 放弃练习
     * @param req practice id 放弃练习请求
     * @return 放弃结果
     */
    Boolean giveUp(GiveUpPracticeReq req);
}
